/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.conf.mbean;

import com.brain.conf.dto.MonedaDto;
import com.brain.conf.dto.TipoCambioDto;
import com.brain.conf.manager.MonedaManager;
import com.brain.conf.manager.TipoCambioManager;
import com.brain.core.view.mbean.*;

import com.brain.core.exception.DAOException;
import com.brain.core.manager.BitacoraManager;
import com.brain.core.manager.RecursosManager;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Indra
 */
@Controller("tipoCambioMBean")
@Scope("session")
public class TipoCambioMBean extends GenericMBean implements Serializable {

    /**
     * Guarda las acciones del sistema en un archivo de texto plano
     *
     * @since 28/01/2014
     */
    private static Logger logger = Logger.getLogger(TipoCambioMBean.class);
    /**
     * Objeto de la clase TipoCambioManager
     *
     * @since 28/01/2014
     */
    @Resource
    private TipoCambioManager manager;
    /**
     * Objeto de la clase TipoCambioManager
     *
     * @since 28/01/2014
     */
    @Resource
    private BitacoraManager bitacoraManager;
    /**
     * Objeto de la clase RecursosManager (acceso a metodos utilitarios)
     *
     * @since 28/01/2014
     */
    @Resource
    private RecursosManager recursosManager;
    /**
     * Objeto de la clase MonedaManager
     *
     * @since 28/01/2014
     */
    @Resource
    private MonedaManager monedaManager;
    /**
     * objeto de la clase ApplicationMBean , acceso a la clase utilitaria de
     * configuración
     *
     * @since 28/01/2014
     */
    @Autowired
    private ApplicationMBean applicationMBean;
    /**
     * objeto de la clase SessionMBean
     *
     * @since 28/01/2014
     */
    @Autowired
    private SessionMBean sessionMBean;
    /**
     * Objeto de la entidad actual
     *
     * @since 28/01/2014
     */
    private TipoCambioDto dto;
    /**
     * Objeto de la entidad actual
     *
     * @since 28/01/2014
     */
    private TipoCambioDto dtoFiltro;
    /**
     * Titulo del formulario
     *
     * @since 28/01/2014
     */
    private String keyEntidad = "key.entidad.tipo.cambio";
    /**
     * Objeto tipo lista de la clase TipoCambioDto
     *
     * @since 28/01/2014
     */
    private List<TipoCambioDto> lista;
    /**
     * Objeto tipo lista de la clase MonedaDto
     *
     * @since 28/01/2014
     */
    private List<MonedaDto> listaMoneda;
    /**
     * Objeto tipo lista de la clase TipoCambioDto
     *
     * @since 28/01/2014
     */

    private TipoCambioDto dtoGuardarDetalle;
    /**
     * Objeto de la clase date que servirá de filtro de fechas
     */
    private Date fechaInicioFiltro;
    /**
     * Objeto de la clase date que servirá de filtro de fechas
     */
    private Date fechaFinFiltro;

    /**
     * Metodo constructor de la clase actual
     *
     * @since 28/01/2014
     */
    public TipoCambioMBean() {
        this.dtoFiltro = new TipoCambioDto();
    }

    /**
     * Metodo que permite instanciar todos los objetos al iniciar el formulario
     *
     * @since 28/01/2014
     */
    public String iniciar() {
        this.lista = null;
        this.dto = null;
        this.dtoFiltro = new TipoCambioDto();
        this.dtoFiltro.setEstado(Boolean.TRUE);

        return manager.getUrlLista();
    }

    /**
     * Metodo que setea los valores del dto y construye el formulario para crear
     * un nuevo registro
     *
     * @since 28/01/2014
     * @return retorna la url de la nueva pagina
     */
    public String nuevo() {
        sessionMBean.setAccion(applicationMBean.getNuevo());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyEntidad, sessionMBean.getAccion()));
        this.dto = manager.inicializar();
        return manager.getUrl();
    }

    /**
     * Metodo que permite cargar los valores de un dto existente y construye el
     * formulario para editar un registro
     *
     * @since 28/01/2014
     * @return retorna la url de la pagina de editado
     */
    public String editar() {
        sessionMBean.setAccion(applicationMBean.getEditar());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyEntidad, sessionMBean.getAccion()));
        try {
            this.dto = manager.obtenerPorId(this.dto.getId());
        } catch (DAOException ex) {
            logger.error(ex);
        }
        return manager.getUrl();
    }

    /**
     * Metodo que permite ver los datos existentes de un dto , sin opción a
     * editar o modificar algún valor
     *
     * @since 28/01/2014
     * @return retorna la url de la pagina principal del formulario
     */
    public String ver() {
        sessionMBean.setAccion(applicationMBean.getVer());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyEntidad, sessionMBean.getAccion()));
        try {
            this.dto = manager.obtenerPorId(this.dto.getId());
        } catch (DAOException ex) {
            logger.error(ex);
        }
        return manager.getUrl();
    }

    /**
     * Metodo que permite buscar todos los registros de la entidad actual
     *
     * @since 28/01/2014
     */
    public void buscar() {
        try {
            if (this.manager.validarFechasFiltro(fechaInicioFiltro, fechaFinFiltro)) {
                this.lista = this.manager.obtener(fechaInicioFiltro, fechaFinFiltro, dtoFiltro);
            }
        } catch (DAOException ex) {
            showError("ERROR_SISTEMA", ex.getMessage());
        }
    }

    /**
     * Metodo que permite guardar y editar datos de la entidad actual
     *
     * @since 28/01/2014
     * @return retorna un valor nulo
     */
    public String guardar() {

        if (manager.guardar(this.dto) != null) {
            this.editar();
        }

        return null;
    }

    /**
     * Metodo que permite retroceder , del formulario actual . A la lista de
     * búsqueda
     *
     * @since 28/01/2014
     * @return retorna la url de la pagina de busqueda de entidad actual
     */

    public String retroceder() {
        buscar();
        return manager.getUrlLista();
    }

    /**
     * Metodo que permite ver el historial de las acciones de un usuario sobre
     * el registro seleccionado
     *
     * @since 28/01/2014
     * @return retorna un valor nulo
     */
    public String verBitacora() {
        bitacoraManager.cargarBitacoraEntidad(manager.getIdEntidad(), this.dto.getId());
        return null;
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        TipoCambioMBean.logger = logger;
    }

    public TipoCambioManager getManager() {
        return manager;
    }

    public void setManager(TipoCambioManager manager) {
        this.manager = manager;
    }

    public BitacoraManager getBitacoraManager() {
        return bitacoraManager;
    }

    public void setBitacoraManager(BitacoraManager bitacoraManager) {
        this.bitacoraManager = bitacoraManager;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public ApplicationMBean getApplicationMBean() {
        return applicationMBean;
    }

    public void setApplicationMBean(ApplicationMBean applicationMBean) {
        this.applicationMBean = applicationMBean;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }

    public TipoCambioDto getDto() {
        return dto;
    }

    public void setDto(TipoCambioDto dto) {
        this.dto = dto;
    }

    public TipoCambioDto getDtoFiltro() {
        return dtoFiltro;
    }

    public void setDtoFiltro(TipoCambioDto dtoFiltro) {
        this.dtoFiltro = dtoFiltro;
    }

    public String getKeyEntidad() {
        return keyEntidad;
    }

    public void setKeyEntidad(String keyEntidad) {
        this.keyEntidad = keyEntidad;
    }

    public List<TipoCambioDto> getLista() {
        return lista;
    }

    public void setLista(List<TipoCambioDto> lista) {
        this.lista = lista;
    }

    public List<MonedaDto> getListaMoneda() throws DAOException {
        return listaMoneda = this.monedaManager.obtenerMonedasActivasPorEmpresa();
    }

    public void setListaMoneda(List<MonedaDto> listaMoneda) {
        this.listaMoneda = listaMoneda;
    }

    public TipoCambioDto getDtoGuardarDetalle() {
        return dtoGuardarDetalle;
    }

    public void setDtoGuardarDetalle(TipoCambioDto dtoGuardarDetalle) {
        this.dtoGuardarDetalle = dtoGuardarDetalle;
    }

    public Date getFechaInicioFiltro() {
        return fechaInicioFiltro;
    }

    public void setFechaInicioFiltro(Date fechaInicioFiltro) {
        this.fechaInicioFiltro = fechaInicioFiltro;
    }

    public Date getFechaFinFiltro() {
        return fechaFinFiltro;
    }

    public void setFechaFinFiltro(Date fechaFinFiltro) {
        this.fechaFinFiltro = fechaFinFiltro;
    }

}
